package cn.tedu.blog.server.mapper;

import cn.tedu.blog.server.pojo.dto.UserAddNewDTO;
import cn.tedu.blog.server.pojo.entity.User;
import cn.tedu.blog.server.pojo.vo.UserListVO;
import cn.tedu.blog.server.pojo.vo.UserLoginVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @Author: 雷茂林
 * @Date:2022/7/15 14:37
 * @Description: 用户管理-数据库进行数据持久化操作映射
 */
@Repository
public interface UserMapper {

    /**
     * 创建用户
     *
     * @param user
     * @return
     */
    Integer createUser(User user);



    /**
     * 删除用户
     * @param id
     * @return
     */
    Integer deleteById(Long id);



    /**
     * 批量删除用户
     * @param list
     * @return
     */
    Integer deleteByIds(List<Long> list);



    /**
     * 修改用户基本信息
     * @param userAddNewDTO
     * @return
     */
    Integer updateById(UserAddNewDTO userAddNewDTO);



    /**
     * 用户修改密码
     * @param userAddNewDTO
     * @return
     */
    Integer updateByIdPassword(UserAddNewDTO userAddNewDTO);



    /**
     * 根据id判断用户是否已存在
     * @param id
     * @return
     */
    Integer isById(Long id);



    /**
     * 查询注册账号是否已被注册
     * @param username
     * @return
     */
    Integer isByUsername(String username);



    /**
     * 查询注册昵称是否已被注册
     * @param nick
     * @return
     */
    Integer isByNick(String nick);



    /**
     * 判断修改后的账号是否已经重复
     * @param id
     * @param username
     * @return
     */
    Integer isUpdateByUsername(@Param("id")Long id ,@Param("username")String username);



    /**
     * 判断修改后的昵称是否已经重复
     * @param id
     * @param nick
     * @return
     */
    Integer isUpdateByNick(@Param("id")Long id ,@Param("nick")String nick);



    /**
     * 根据条件查询结果集的数量
     * @return
     */
    int getCountAll(UserListVO userListVO);



    /**
     * 根据用户id回显用户信息
     * @param id
     * @return
     */
    UserListVO getBackFillById(Long id);



    /**
     * 根据用户名查询用户权限
     * @param username
     * @return
     */
    UserLoginVO getByUsername(String username);



    /**
     * 分页条件查询用户信息
     * @param userListVO
     * @return
     */
    List<UserListVO> listByKeyword(UserListVO userListVO);

}
